"""
author: liuxu
date: 2025/7/15
description: 定义hipprof输出文件数据格式
"""


class PMCIndicatorType(object):
    # 通用pmc指标
    PMC_GENERAL_METRIC = {
        "kernel_dispatch_index": int,  # 内核调度索引
        "gpu_id": int,  # GPU设备ID
        "dispatch_queue_id": int,  # 核函数下发队列ID，从0开始递增
        "dispatch_queue_index": int,  # hsa返回的调度队列索引
        "process_id": int,  # 进程ID
        "thread_id": int,  # 线程ID
        "grid_size": int,  # 网格大小
        "work_group_size": int,  # 工作组大小，在1个cu上运行的线程数
        "shared_memory_size": int,  # 共享内存大小
        "scratch_size": int,  # 暂存空间大小
        "vgpr_count": int,  # 向量寄存器数量；计算公式（vgpr+1）*4
        "sgpr_count": int,  # 标量寄存器数量；计算公式（sgpr/2+1）*16
        # "fbarrier_count": int,  # 栅栏计数器  # dtk-25.10删除了此指标（fbarrier无实际作用，可能会引起歧义）
        "signal_handle": str,  # 信号句柄（十六进制）
        "kernel_time": float,  # 内核执行时间
        "processed_ALU_instructions": float,  # 计算单元负载率（%）
        "performance": float,  # 计算峰值（GFlops）
        "shared_memory_operation": int,  # LDS共享内存操作次数
        "shared_memory_bank_conflict": float,  # LDS Bank冲突时间占比（%）
        "L1_cache_unit_is_active": float,  # L1缓存操作时间占比（%）
        "L1_cache_unit_is_stalled": float,  # L1缓存等待时间占比（%）
    }
    # 基础pmc指标
    BASIC_METRIC = {"L2_cache_write_unit_is_stalled": float,  # L2缓存写入操作占比（%）
                    "L2_cache_hit_rate": float  # L2缓存命中率（%）
                    }
    # 读相关PMC指标
    READ_METRIC = {"number_of_L2_cache_read_requests": float,  # L2 缓存读请求次数
                   "size_of_L2_cache_read": float  # L2 缓存读字节数（千字节）
                   }
    # 写相关PMC指标
    WRITE_METRIC = {"number_of_L2_cache_write_requests": float,  # L2 缓存写请求次数
                    "size_of_L2_cache_write": float  # L2 缓存写字节数（千字节）
                    }

